package bean;

import service.impl.ProductServiceImpl;

import java.math.BigDecimal;
import java.util.ArrayList;

public class ProductCart {
    private ProductServiceImpl productService = new ProductServiceImpl();
    private BigDecimal totalPrice;
    private final ArrayList<ProductCartItem> productCartItems;
    private ProductCartItem getProductCartItemById(Integer id){
        for (ProductCartItem p :productCartItems) {
            if (id.equals(p.getProductId())){
                return p;
            }
        }
        return null;
    }

    public BigDecimal getTotalPrice() {
        return totalPrice;
    }

    public ArrayList<ProductCartItem> getProductCartItems() {
        return productCartItems;
    }

    public ProductCart() {
        totalPrice = new BigDecimal("0");
        productCartItems = new ArrayList<>();
    }

    public void addProduct(Integer id){
        ProductCartItem productCartItem = getProductCartItemById(id);
        if (productCartItem == null) {
            Product product = productService.queryById(id);
            if (product==null){
                return;
            }
            productCartItem = new ProductCartItem(id, 1, product.getPrice(), product.getName());

        }
        totalPrice = totalPrice.add(productCartItem.getPrice());
        if (productCartItems.size()==0){
            productCartItems.add(productCartItem);
            return;
        }
        for (ProductCartItem p : productCartItems) {
            if (p.getProductId().equals(productCartItem.getProductId())){
                p.setCount(p.getCount()+1);
                return;
            }
        }
        productCartItems.add(productCartItem);
    }
    public void removeProduct(Integer id){
        for (ProductCartItem p : productCartItems) {
            if (p.getProductId().equals(id)){
                if (p.getCount()>1){
                    p.setCount(p.getCount()-1);
                }else {
                    productCartItems.remove(p);
                }
                totalPrice = totalPrice.subtract(p.getPrice());
                return;
            }
        }
    }
    public void clear(Integer id){
        productCartItems.clear();
        totalPrice = new BigDecimal("0");
    }
    public void deleteProduct(Integer id){
        ProductCartItem productCartItem = getProductCartItemById(id);
        if (productCartItem == null) {
            return;
        }
        productCartItems.remove(productCartItem);
        totalPrice = totalPrice.subtract(productCartItem.getPrice().multiply(BigDecimal.valueOf(productCartItem.getCount())));
    }
}
